#include "LatticeScreen.h"

unsigned char __idata LS_RAM[8]={0x0,0x10,0x38,0x54,0x10,0x10,0x10,0x0};//默认显示数据，向左的箭头





void LS_Init()
{

#ifdef USING_STC15
volatile static __sfr __at(0x91)  P1M1;
volatile static __sfr __at(0x92)  P1M0;
//初始化74HC595IO口模式为推挽输出
P1M0|=0x3f;
P1M1&=~0x3f;
#endif
  
  RCK=0;
  SCK=0;

  //清除移位寄存器数据
  SCLR=0;
  SCLR=1;
  
  OE=0;
}

void LS_Deinit()
{
#ifdef USING_STC15
volatile static __sfr __at(0x91)  P1M1;
volatile static __sfr __at(0x92)  P1M0;
//初始化74HC595IO口模式为准双向口
P1M0&=~0x3f;
P1M1&=~0x3f;
#endif

  RCK=0;
  SCK=0;

  //清除移位寄存器数据
  SCLR=0;
  
  OE=1;
}

void LS_595_DataOut(unsigned char Row_Data,unsigned char Col_Data)//输出数据到595
{
unsigned char i=0;

RCK=0;
SCK=0;

for(i=0;i<8;i++)
{
SCK=0;
	if(Row_Data & (1<<i))
	{
		ROW_IN=1;
	}
	else
	{
		ROW_IN=0;
	}

	if(Col_Data & (1<<i))
	{
		COL_IN=1;
	}
	else
	{
		COL_IN=0;
	}

SCK=1;
}

RCK=1;

}


void LS_DisplayOneCol(unsigned char Col_Data,unsigned char Row_Index)
{
if(Row_Index < 8)
{
   LS_595_DataOut(1<<Row_Index,~(Col_Data));
}

}

static unsigned __idata char LS_Current_Index=0;

void LS_Refresh()
{

  LS_DisplayOneCol(LS_RAM[LS_Current_Index],LS_Current_Index++);
  if(LS_Current_Index>=8)
  {
  	LS_Current_Index=0;
  }
 
}


const uint8_t __code Font5x7[]=//5X7字体
{
  	0x00, 0x00, 0x00, 0x00, 0x00,// ' '
        0x00, 0x00, 0x5F, 0x00, 0x00,// !
        0x00, 0x07, 0x00, 0x07, 0x00,// "
        0x14, 0x7F, 0x14, 0x7F, 0x14,// #
   	0x24, 0x2A, 0x07, 0x2A, 0x12,// $
    	0x23, 0x13, 0x08, 0x64, 0x62,// %
        0x37, 0x49, 0x55, 0x22, 0x50,// &
        0x00, 0x05, 0x03, 0x00, 0x00,// '
        0x00, 0x1C, 0x22, 0x41, 0x00,// (
        0x00, 0x41, 0x22, 0x1C, 0x00,// )
        0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
        0x08, 0x08, 0x3E, 0x08, 0x08,// +
        0x00, 0x50, 0x30, 0x00, 0x00,// ,
        0x08, 0x08, 0x08, 0x08, 0x08,// -
        0x00, 0x60, 0x60, 0x00, 0x00,// .
        0x20, 0x10, 0x08, 0x04, 0x02,// /
        0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
        0x00, 0x42, 0x7F, 0x40, 0x00,// 1
        0x42, 0x61, 0x51, 0x49, 0x46,// 2
        0x21, 0x41, 0x45, 0x4B, 0x31,// 3
        0x18, 0x14, 0x12, 0x7F, 0x10,// 4
        0x27, 0x45, 0x45, 0x45, 0x39,// 5
        0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
        0x01, 0x71, 0x09, 0x05, 0x03,// 7
        0x36, 0x49, 0x49, 0x49, 0x36,// 8
        0x06, 0x49, 0x49, 0x29, 0x1E,// 9
        0x00, 0x36, 0x36, 0x00, 0x00,// :
        0x00, 0x56, 0x36, 0x00, 0x00,// ;
        0x00, 0x08, 0x14, 0x22, 0x41,// <
        0x14, 0x14, 0x14, 0x14, 0x14,// =
        0x41, 0x22, 0x14, 0x08, 0x00,// >
        0x02, 0x01, 0x51, 0x09, 0x06,// ?
        0x32, 0x49, 0x79, 0x41, 0x3E,// @
        0x7E, 0x11, 0x11, 0x11, 0x7E,// A
        0x7F, 0x49, 0x49, 0x49, 0x36,// B
        0x3E, 0x41, 0x41, 0x41, 0x22,// C
        0x7F, 0x41, 0x41, 0x22, 0x1C,// D
        0x7F, 0x49, 0x49, 0x49, 0x41,// E
        0x7F, 0x09, 0x09, 0x01, 0x01,// F
        0x3E, 0x41, 0x41, 0x51, 0x32,// G
        0x7F, 0x08, 0x08, 0x08, 0x7F,// H
        0x00, 0x41, 0x7F, 0x41, 0x00,// I
        0x20, 0x40, 0x41, 0x3F, 0x01,// J
        0x7F, 0x08, 0x14, 0x22, 0x41,// K
        0x7F, 0x40, 0x40, 0x40, 0x40,// L
        0x7F, 0x02, 0x04, 0x02, 0x7F,// M
        0x7F, 0x04, 0x08, 0x10, 0x7F,// N
        0x3E, 0x41, 0x41, 0x41, 0x3E,// O
        0x7F, 0x09, 0x09, 0x09, 0x06,// P
        0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
        0x7F, 0x09, 0x19, 0x29, 0x46,// R
        0x46, 0x49, 0x49, 0x49, 0x31,// S
        0x01, 0x01, 0x7F, 0x01, 0x01,// T
        0x3F, 0x40, 0x40, 0x40, 0x3F,// U
        0x1F, 0x20, 0x40, 0x20, 0x1F,// V
        0x7F, 0x20, 0x18, 0x20, 0x7F,// W
        0x63, 0x14, 0x08, 0x14, 0x63,// X
        0x03, 0x04, 0x78, 0x04, 0x03,// Y
        0x61, 0x51, 0x49, 0x45, 0x43,// Z
        0x00, 0x00, 0x7F, 0x41, 0x41,// [
        0x02, 0x04, 0x08, 0x10, 0x20,// "\"
        0x41, 0x41, 0x7F, 0x00, 0x00,// ]
        0x04, 0x02, 0x01, 0x02, 0x04,// ^
        0x40, 0x40, 0x40, 0x40, 0x40,// _
        0x00, 0x01, 0x02, 0x04, 0x00,// `
        0x20, 0x54, 0x54, 0x54, 0x78,// a
        0x7F, 0x48, 0x44, 0x44, 0x38,// b
        0x38, 0x44, 0x44, 0x44, 0x20,// c
        0x38, 0x44, 0x44, 0x48, 0x7F,// d
        0x38, 0x54, 0x54, 0x54, 0x18,// e
        0x08, 0x7E, 0x09, 0x01, 0x02,// f
        0x08, 0x14, 0x54, 0x54, 0x3C,// g
        0x7F, 0x08, 0x04, 0x04, 0x78,// h
        0x00, 0x44, 0x7D, 0x40, 0x00,// i
        0x20, 0x40, 0x44, 0x3D, 0x00,// j
        0x00, 0x7F, 0x10, 0x28, 0x44,// k
        0x00, 0x41, 0x7F, 0x40, 0x00,// l
        0x7C, 0x04, 0x18, 0x04, 0x78,// m
        0x7C, 0x08, 0x04, 0x04, 0x78,// n
        0x38, 0x44, 0x44, 0x44, 0x38,// o
        0x7C, 0x14, 0x14, 0x14, 0x08,// p
        0x08, 0x14, 0x14, 0x18, 0x7C,// q
        0x7C, 0x08, 0x04, 0x04, 0x08,// r
        0x48, 0x54, 0x54, 0x54, 0x20,// s
        0x04, 0x3F, 0x44, 0x40, 0x20,// t
        0x3C, 0x40, 0x40, 0x20, 0x7C,// u
        0x1C, 0x20, 0x40, 0x20, 0x1C,// v
        0x3C, 0x40, 0x30, 0x40, 0x3C,// w
        0x44, 0x28, 0x10, 0x28, 0x44,// x
        0x0C, 0x50, 0x50, 0x50, 0x3C,// y
        0x44, 0x64, 0x54, 0x4C, 0x44,// z
        0x00, 0x08, 0x36, 0x41, 0x00,// {
        0x00, 0x00, 0x7F, 0x00, 0x00,// |
        0x00, 0x41, 0x36, 0x08, 0x00,// }
        0x02, 0x01, 0x02, 0x04, 0x02,// ~
        0xff, 0xff, 0xff, 0xff, 0xff //black block// 
};

void LS_Show_Char_Font5x7(char c)//显示5x7字体
{
if(c<' ')//不可显示字符，单8x8点阵不做处理
	return;
LS_RAM[0]=0x00;
LS_RAM[1]=0x00;
LS_RAM[7]=0x00;

uint8_t i=0;
uint16_t font_pos=(((uint16_t)c-0x20)*5);
for(i=0;i<5;i++)
{
//由于字体是按列显示的，需要将显示数据上下颠倒才能正常显示
	//LS_RAM[i+2]=Font5x7[font_pos+i];
	LS_RAM[i+2]=
	((Font5x7[font_pos+i]&(1<<0))?(1<<7):(0))+
	((Font5x7[font_pos+i]&(1<<1))?(1<<6):(0))+
	((Font5x7[font_pos+i]&(1<<2))?(1<<5):(0))+
	((Font5x7[font_pos+i]&(1<<3))?(1<<4):(0))+
	((Font5x7[font_pos+i]&(1<<4))?(1<<3):(0))+
	((Font5x7[font_pos+i]&(1<<5))?(1<<2):(0))+
	((Font5x7[font_pos+i]&(1<<6))?(1<<1):(0))+
	((Font5x7[font_pos+i]&(1<<7))?(1<<0):(0));
}


}

